package cn.com.greatwall.flowable.service;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

import org.flowable.engine.repository.ProcessDefinition;
import org.springframework.data.domain.Pageable;

import cn.com.greatwall.flowable.service.dto.IdentityLinkDto;
import cn.com.greatwall.flowable.service.dto.ProcessDefinitionDto;
import cn.com.greatwall.flowable.service.dto.criteria.ProcessDefinitionQueryCriteria;

/**
 * @Author herw
 * @Time 2020-11-17 14:55:55
 * @Version 1.0
 * @Description: TODO(用一句话描述该文件做什么)
 */
public interface ProcessDefinitionService {
    /**
     * 分页查询
     * 
     * @param criteria 条件
     * @param pageable 分页参数
     * @return /
     */
    Map<String, Object> queryAll(ProcessDefinitionQueryCriteria criteria, Pageable pageable);
    
    /**
     * 查询授权流程
     * 
     * @param criteria 条件
     * @param pageable 分页参数
     * @return /
     */
    Map<String, Object> queryStartableUser(ProcessDefinitionQueryCriteria criteria, Pageable pageable);

    /**
     * 根据ID查询
     *
     * @param processDefinitionId
     * @return
     */
    ProcessDefinition findById(String processDefinitionId);
    
    /**
     * 删除
     * 
     * @param id /
     */
    void delete(String processDefinitionId, Boolean cascade);
    
    /**
     * 激活流程定义
     *
     * @param 
     */
    void activate(ProcessDefinitionDto dto);
    
    /**
     * 挂起流程定义
     *
     * @param 
     */
    void suspend(ProcessDefinitionDto dto);
    
    /**
     * 导出流程XML
     * @param processDefinitionId
     * @return 
     */
    InputStream exportXML(String processDefinitionId);
    
    /**
     * 
     * 
     * @param criteria 条件
     * @param pageable 分页参数
     * @return /
     */
    List<IdentityLinkDto> queryProcessDefinitionIdentityLink(String processDefinitionId);
    
    /**
     * 保存流程授权
     * @param identityRequest
     */
    void saveProcessDefinitionIdentityLink(IdentityLinkDto dto);
    
    /**
     * 删除流程授权
     *
     * @param processDefinitionId
     * @param identityId
     * @param type
     */
    void deleteProcessDefinitionIdentityLink(String processDefinitionId, String identityId, String type);
}
